def getEnd(i):
while nodes[i][1] != 0: i = nodes[i][1]-1
return i
n = int(input())
nodes = [list(map(int, input().split())) for _ in range(n)]
starts = [i for i in range(n) if nodes[i][0] == 0]
ends = [getEnd(i) for i in starts]
for i in range(len(starts)-1):
nodes[ends[i]][1] = starts[i+1]+1
nodes[starts[i+1]][0] = ends[i]+1
for row in nodes: print(*row)
151A - Soft Drinking | 1352A - Sum of Round Numbers |
281A - Word Capitalization | 1646A - Square Counting |
266A - Stones on the Table | 61A - Ultra-Fast Mathematician |
148A - Insomnia cure | 1650A - Deletions of Two Adjacent Letters |
1512A - Spy Detected | 282A - Bit++ |
69A - Young Physicist | 1651A - Playoff |
734A - Anton and Danik | 1300B - Assigning to Classes |
1647A - Madoka and Math Dad | 710A - King Moves |
1131A - Sea Battle | 118A - String Task |
236A - Boy or Girl | 271A - Beautiful Year |
520B - Two Buttons | 231A - Team |
479C - Exams | 1030A - In Search of an Easy Problem |
158A - Next Round | 71A - Way Too Long Words |
160A - Twins | 1A - Theatre Square |
1614B - Divan and a New Project | 791A - Bear and Big Brother |